焊接新需求接口说明
修订日期 | 修订版本 | 修订内容 | 修订人 |
---|---|---|---|
2025.05.08 | v0.1 | 初始化文档 | 李东阳 |
2025.07.16 | v0.2 | 更新接口开发说明 | 李东阳 |
新增需求: ① 方位角设置;② 中心上升设置;③ 动态调整频率和幅值
方位角
SuperimposedParameters结构体新增属性:
double azimuth; // 摆焊波形方位角,单位rad
定义: 在摆焊平面,增加方位角theta,以图像的第一个周期为例,定义方位角向量,起点是T/4周期处x轴上的点,终点是波峰顶点,方位角是Y轴和方位角向量之间的夹角:

理论取值范围(-π/2,π/2)
中心上升
SuperimposedParameters结构体新增属性:
double ridge_height; // 中心上升高度
定义: 将摆焊波形投影到摆焊坐标系的xy平面,波形和主路径的交点,给交点设置的高度值。在轨迹开头和轨迹结尾不进行中心上升

动态调整频率和幅值
SuperimposedParameters结构体新增属性:
int adjust_cycle_num{0}; // 动态调节频率和幅值时, 指定的过渡段数量
在摆焊过程中实现频率和幅值的实时调整,用户可以设置过渡段的数量。

新增接口
/**
* @brief 设置摆动参数,位置摆主要用于焊接,姿态摆主要用于力控寻孔
* @param sp: 摆动参数,具体参考SuperimposedParameters结构体
* @return: 返回值 < 0, 表示设置失败
*/
ARAL_API_COMMON(1.0) int tpSetWeaveParameters(const SuperimposedParameters& sp) = 0;
/**
* @brief 支持在摆动过程中调整频率和振幅,暂只支持正弦摆
* @param frequency: 摆动参数频率, 范围[0.1, 5], 单位: Hz
* @param amplitude: 两侧摆动幅值, 单位: m
* @return: 返回值 < 0, 表示调整失败
*/
ARAL_API_COMMON(1.0) int tpUpdateWeaveParameters(const double& frequency, const Array2d& amplitude) = 0;
算法版本0.40.28+0e304ee以前的版本, 开发实例
std::vector<std::vector<interface::PathPoint>> pathpoints;
std::vector<interface::RLPose> poses;
std::vector<interface::PathProperty> path_propertys;
std::vector<interface::MoveProperty> move_propertys;
interface::MoveProperty mAttr_L;
std::vector<double> maxV,maxA,maxJ;
maxV = {0.01, 2.0};
maxA = {4.0, 16.0};
maxJ = {32.0, 128.0};
mAttr_L = generateMoveProperty(interface::MoveMode::POSITION, 0, maxV, maxA, maxJ);
// step01 设置焊接参数
interface::SuperimposedParameters sp; // 焊接参数
sp.vel = maxV[0]; // 焊接参数vel和焊接轨迹的位置速度一致
sp.frequency = 1;
sp.amplitude = {0.0025, 0.0025};
sp.angle = M_PI / 4;
sp.type = interface::WeaveType::SINE;
sp.azimuth = M_PI / 3;
sp.ridge_height = 0.0005;
sp.hold_distance = {0.005, 0.01};
sp.adjust_cycle_num = 1;
sp.enable = true;
// step02 生成路点
poses = { {0.413127, 0.152011, 0.44038, -3.13922, -0.00236571, 1.57078} };
int N = poses.size();
path_propertys.resize(N);
move_propertys.resize(N);
pathpoint.resize(N);
interface::ToolWorkpiece tw;
for(int i = 0; i < N; i++)
{
path_propertys[i].describe_space = interface::DescribeSpace::CARTESIAN;
path_propertys[i].blend_radius = {0.1, 0.1};
move_propertys[i] = mAttr_L;
pathpoint[i] = generatePathPoint(interface::DescribeSpace::CARTESIAN, i+1, {}, poses[i], tw);
}
// step03 添加摆焊轨迹
ret = robot->tpSetWeaveParameters(sp); // 第一次调用,摆焊开始
int N = pathpoint.size();
for(int i = 0; i < N; i++)
{
ret = robot->tpAddPositionLine(pathpoint[i], path_propertys[i], move_propertys[i]);
CHECK(ret >= 0);
}
sp.enable = false;
ret = robot->tpSetWeaveParameters(sp); // 第二次调用,摆焊结束
//===============================动态调整焊接参数============================================
// 在当前摆焊执行过程中,任意时刻调用tpUpdateWeaveParameters,即可实现频率和幅值的实时调整
robot->tpUpdateWeaveParameters(1, {0.001, 0.001});
算法0.40.28+0e304ee以后的版本
新增添加摆焊路径接口: tpAddWeavePath, 从此版本后, 焊接路径的添加, 一律采用该接口
/**
* @brief 添加摆焊路径
* @param path_info: 摆焊路径, 描述多条路径的几何信息,路径属性,运动属性以及工具和工件信息,其每个元素 MotionProperty 用于创建一条基本路径 (直线、圆弧),
* 通过在PathProperty(偏移路径只能是笛卡尔运动, describe_space = interface::DescribeSpace::CARTESIAN)设置交融半径大小,路径之间可进行交融形成组合路径(支持直线、圆弧)
* @return 返回值 < 0, 表示添加失败
*/
ARAL_API_COMMON(1.0) int tpAddWeavePath(const std::vector<MotionProperty>& path_info) = 0;
使用示例:
<!-- 不解析相关语法标签 -->
interface::RLJntArray q0; // 初始关节角
interface::SuperimposedParameters sp; // 焊接参数
// 路径属性
interface::PathProperty property_L; // 直线路径
property_L.describe_space = interface::DescribeSpace::CARTESIAN;
property_L.blend_radius = {0.01, 0.01};
property_L.cur_prop.type= interface::CurveType::LINE;
interface::PathProperty property_C; // 圆弧路径
property_C.describe_space = interface::DescribeSpace::CARTESIAN;
property_C.blend_radius = {0.01, 0.01};
property_C.cur_prop.type= interface::CurveType::ARC;
// 运动属性
interface::MoveProperty mAttr_L;
maxV = {0.01, 2.0};
maxA = {4.0, 16.0};
maxJ = {32.0, 128.0};
mAttr_L = generateMoveProperty(interface::MoveMode::POSITION, 0, maxV, maxA, maxJ);
std::vector<interface::RLPose> poses;
std::vector<interface::MotionProperty> path_info;
interface::MotionProperty pair;
// step01 设置焊接参数
interface::SuperimposedParameters sp; // 焊接参数
sp.vel = maxV[0]; // 焊接参数vel和焊接轨迹的位置速度一致
sp.frequency = 1;
sp.amplitude = {0.0025, 0.0025};
sp.angle = M_PI / 4;
sp.type = interface::WeaveType::SINE; // 目前波形仅有正弦波
sp.azimuth = M_PI / 3;
sp.ridge_height = 0.0005;
sp.hold_distance = {0.005, 0.01}; // 停留距离和停留时间只能设置其中一种
sp.adjust_cycle_num = 1;
// step02 生成路径段集合path_info
type.second = aubo_i10;
q0 = {0.4302601943336776,-0.2451118594186679,1.766761099778305,0.4399033081946187,1.573937800524044,0.4302739018325941};
poses = { {0.813127101, 0.152011269523124, 0.4403801151918321, -3.139215899747858, -0.002365712169961738, 1.570777964950287}, // 和q0对应的位姿(起点位姿)
{0.4131283855133971,0.1520110248688192,0.440379999293883,-3.139220114732462,-0.002364853252729899,1.570779942769754},
{0.1493783563267952,0.231189838194646,0.4403800073239479,-3.139220542691547,-0.002364934837960015,1.570780116886467},
{0.4272623532102556,0.3587243122329543,0.4396531535686758,-3.137317545087084,0.0005621364367052419,1.570010641506535} };
int N = poses.size();
std::vector<interface::PathPoint> path0, path1;
for(int i = 0; i < N; i++) // 这里生成路径段,其中{poses[0], poses[1]}组成直线路径, {poses[1], poses[2], poses[3]}组成圆弧路径
{
if(i < 2)
path0.push_back(generatePathPoint(interface::DescribeSpace::CARTESIAN, i+1, {}, poses[i], t_w));
if(i > 0)
path1.push_back(generatePathPoint(interface::DescribeSpace::CARTESIAN, i+1, {}, poses[i], t_w));
}
pair = {path0, property_L, mAttr_L};
path_info.push_back(pair);
pair = {path1, property_C, mAttr_L};
path_info.push_back(pair);
// step03 添加摆焊轨迹
sp.enable = true;
ret = robot->tpSetWeaveParameters(sp);
ret = robot->tpAddWeavePath(path_info);
CHECK(ret >= 0);
robot->tpSetEndPath();
sp.enable = false;
ret = robot->tpSetWeaveParameters(sp);
//===============================动态调整焊接参数============================================
// 在当前摆焊执行过程中,任意时刻调用tpUpdateWeaveParameters,即可实现频率和幅值的实时调整(停留时间属性不支持动态调整)
robot->tpUpdateWeaveParameters(1, {0.001, 0.001});
<!-- 结束 -->